#pragma once
#include <cstddef>
#include <deque>
#include <list>
#include <vector>

template<class T, class Container = std::deque<T>>
class queue
{
public:
    void push(const T &value)
    {
        con_.push_back(value);
    }
    void pop()
    {
        con_.pop_back();
    }
    size_t size() const
    {
        return con_.size();
    }
    bool empty() const
    {
        return con_.empty();
    }
    const T &front() const
    {
        return con_.front();
    }
    T &front()
    {
        return con_.front();
    }
    const T &back() const
    {
        return con_.back;
    }
    T &back()
    {
        return con_.back;
    }

private:
    Container con_;
};